package com.example.demo.interview.ali.q20200423;

/**
 * @author liweizhi
 * @date 2020/4/28
 *
 * >> 和 >>> 的区别是？
 *
 * A. 任何整数没有区别
 * B. 负整数一定没有区别
 * C. 浮点数可以 >> 运算，但是不可以 >>> 运算
 * D. 正整数一定没有区别
 *
 * D是对的,
 * >> 和 >>> 都是按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),区别再去高位补什么
 * >>是带符号位右移,高位的空位补符号位,即正数补0,负数补1.符号位不变.
 * >>>是无符号右移,高位都补0
 */
public class Test005 {
    public static void main(String[] args) {
        // -1的原码是 1000 0000 0000 0000 0000 0000 0000 0001
        // -1的反码是 1111 1111 1111 1111 1111 1111 1111 1110
        // -1的补码是 1111 1111 1111 1111 1111 1111 1111 1111
        // JAVA中负数是用补码表示的
        // 而正数的原码==反码==补码;所以可以理解成JAVA中的数字都是用补码表示的
        System.out.println(-1 >> 1);
        System.out.println(-1 >>> 1);

        System.out.println(4 >> 1);
        System.out.println(4 >>> 1);

        System.out.println(-4 >> 1);
        System.out.println(-4 >>> 1);
    }
}
